package src.greed;

public class no376 {//数组中的摆动序列

    /**
     * 共三种情况：
     * 1、左右有峰值，中间夹平坡
     * 2、单调坡中有平坡
     * 3、首尾两端，比如[2,3]就是res=2
     */
    public int wiggleMaxLength(int[] nums) {
        if (nums.length == 1) return 1;
        int pre = 0, next;  //pre=0 表示nums[1]左面假装是平坡
        int res = 1;
        for (int i = 0; i < nums.length - 1; i++) {
            next = nums[i + 1] - nums[i];
            //半边带等号解决情况1，左平右坡时res++，连续平坡中只保留最后一个点
            if ( (pre >= 0 && next < 0) || (pre <= 0 && next > 0) ) {
                res++;
                pre = next;  //放在if里面更新pre值能解决情况2，只有坡度变化时才更新pre
            }
            //pre = next; 放在这里就变成了每个数都计算pre，所以 左平右坡 的情况会被记录，不符合
        }
        return res;

    }
}
